]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
windowManager: Handle return value/errors from systemd unit calls
authorCarlos Garnacho <carlosg@gnome.org>
Thu, 7 May 2020 09:15:46 +0000 (11:15 +0200)
committerFlorian Müllner <fmuellner@gnome.org>
Thu, 7 May 2020 10:16:03 +0000 (12:16 +0200)
These may produce errors, and return a value indicating we should
proceed further. Check for those when starting/stopping gsd-xsettings.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1238
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2755

js/ui/windowManager.js

index ffbec6d83c7f66575d1488442819f02bc0680a1e..14c914099f5b6f1df6e8af52c4ded6c082b84408 100644 (file)
@@ -900,35 +900,45 @@ var WindowManager = class {
 
         global.display.connect('init-xserver', (display, task) => {
             IBusManager.getIBusManager().restartDaemon(['--xim']);
-            Shell.util_start_systemd_unit('gsd-xsettings.target', 'fail');
-
-            /* Leave this watchdog timeout so don't block indefinitely here */
-            let timeoutId = GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, 5, () => {
-                Gio.DBus.session.unwatch_name(watchId);
-                log('Warning: Failed to start gsd-xsettings');
-                task.return_boolean(true);
-                timeoutId = 0;
-                return GLib.SOURCE_REMOVE;
-            });
 
-            /* When gsd-xsettings daemon is started, we are good to resume */
-            let watchId = Gio.DBus.session.watch_name(
-                'org.gnome.SettingsDaemon.XSettings',
-                Gio.BusNameWatcherFlags.NONE,
-                () => {
-                    Gio.DBus.session.unwatch_name(watchId);
-                    if (timeoutId > 0) {
+            try {
+                if (Shell.util_start_systemd_unit('gsd-xsettings.target', 'fail')) {
+                    /* Leave this watchdog timeout so don't block indefinitely here */
+                    let timeoutId = GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, 5, () => {
+                        Gio.DBus.session.unwatch_name(watchId);
+                        log('Warning: Failed to start gsd-xsettings');
                         task.return_boolean(true);
-                        GLib.source_remove(timeoutId);
-                    }
-                },
-                null);
+                        timeoutId = 0;
+                        return GLib.SOURCE_REMOVE;
+                    });
+
+                    /* When gsd-xsettings daemon is started, we are good to resume */
+                    let watchId = Gio.DBus.session.watch_name(
+                        'org.gnome.SettingsDaemon.XSettings',
+                        Gio.BusNameWatcherFlags.NONE,
+                        () => {
+                            Gio.DBus.session.unwatch_name(watchId);
+                            if (timeoutId > 0) {
+                                task.return_boolean(true);
+                                GLib.source_remove(timeoutId);
+                            }
+                        },
+                        null);
+                }
+            } catch (e) {
+                log('Error starting gsd-xsettings: %s'.format(e.message));
+            }
+
             return true;
         });
         global.display.connect('x11-display-closing', () => {
             if (!Meta.is_wayland_compositor())
                 return;
-            Shell.util_stop_systemd_unit('gsd-xsettings.target', 'fail');
+            try {
+                Shell.util_stop_systemd_unit('gsd-xsettings.target', 'fail');
+            } catch (e) {
+                log('Error stopping gsd-xsettings: %s'.format(e.message));
+            }
             IBusManager.getIBusManager().restartDaemon();
         });